#include <vector>
#include <iostream>
using namespace std;

/*

1. 索引 0 的元素一定在最终的结果里
[1]
[1, 1] -> [1, X]
[1, 2] -> [1, 2]

2. 当我们遇到一对不相同的数字时，后面的数字是出现在结果里的

-----

我们要准备两个位置
* 一个叫做 读取位置 R
* 一个叫做 写入位置 W

双指针法、双位置法，当我们需要在原地处理数组内容的时候可以考虑。

          R
[1, 2, 3, 4, 3, 3, 4]
    W 
                      R
[2, 3, 5, 6, 7, 6, 7]
                W 0 ~ w-1


nums[R - 1] 和 nums[R] 是否相等：
* 如果相等，位置 W 上的数字一定是需要被改写的，保持 W 不变，R 向右移动
* 如果不相等，nums[W] = nums[R] W 和 R 都向右移动
*/
void deduplicate(vector<int> &nums) {
  int r = 1;
  int w = 1;

  // while (r < nums.size())
  循环一直到 R 出界为止 {
    比较 nums[r] 和 nums[r - 1]

    如果相等
      r = r + 1
    否则
      nums[w] = nums[r];
      r = r + 1;
      w = w + 1;
  }

  // 0 ~ w-1
  for (int i = 0; i <= w-1; ++i) {
    cout << nums[i] << " ";
  }
  cout << endl;
}

/*
编写一个函数，统计一个整数数组中，满足下面两个条件的整数的个数：
* 条件1: 元素本身是偶数；
* 条件2: 元素的数位和是奇数（1234 = 1 + 2 + 3 + 4 = 10）；

{116,180}
*/

/*
n = 1234
digitsSum = 4 + 3 + 2 + 1
           商   余数
1234 / 10  123  4
123 / 10   12   3
12 / 10    1    2
1  / 10    0    1
0 停止
*/
bool TF(int n) {
  if (n % 2 == 0) {
    // 继续判断数位和是否为奇数
    // 计算 n 的数位和
    int digitsSum = 0;

    while (n != 0) {
      digitsSum += (n % 10);
      n = n / 10;
    }

    return digitsSum % 2 != 0;
  }

  return false;
}

// {180, 131, 220, 229, 510, 518}
int countEvens(vector<int> nums) {

}
